[アップデート]AWS Glueがジョブ実行後のパーティション更新に対応しました!
AWS Glueがジョブ実行後のパーティション更新に対応いたしました!
今までパーティションの更新をするためには、Glueクローラを実行する必要がありました。
それがジョブ実行時に更新できるようになったので、パーティション更新のためにわざわざGlueクローラを動かす必要がなくなる可能性があります。
図で分かる概要
たとえば、AWS WAFのログをjson形式から年、月でパーティション分割したjson形式に変換するGlueジョブを考えます。
Glueジョブを定期的に動かし、2020/04月分が増えた時にGlueジョブを動かすと、S3には4月分のデータが連携されますが、Glueデータカタログのパーティションが更新されません。 パーティションが反映されないので、Athenaでは4月分のクエリがヒットしません。 別途Glueクローラを動かして、パーティションを反映する必要がありました。
今回のアップデートで、Glueジョブ実行後にGlueデータカタログのパーティションを更新できるようになり、パーティションの更新がGlueジョブで完結するようになりました。
やってみる
読み込み元のS3(json)には4月分のログデータが有り、書き込み先のS3(json)にはまだ4月分のデータが無い状況とお考えください。
公式ドキュメントを参考にして、Glueジョブのpythonスクリプトにデータカタログのパーティション更新処理を追加します。
Glueジョブを実行後、書き込み先のS3を確認すると4月分のデータが書き込まれていることがわかります。
Gluedデータカタログのパーティションキーを見てみると、2020/04月分のパーティションが更新されていることがわかります。
パーティションが更新されているので、Glueクローラを実行することなくAthenaで新規パーティションの4月分のデータもクエリで取ってこれます。
注意点
Glueジョブ内でのデータカタログの更新は、次の制限事項があることに注意してください。
- Amazon Simple Storage Service (Amazon S3) ターゲットのみがサポートされます。
- json、csv、avro、および glueparquet の形式のみがサポートされます。
- DynamicFrame スキーマは、Data Catalog テーブルのスキーマと同等またはそのサブセットである必要があります。
- partitionKey は、ジョブ内のスクリプトで渡されたパラメーターと、データカタログの partitionKey とで、同じ順序で同じ名称である必要があります。
終わりに
これまでパーティションの更新のためにGlueクローラを動かす必要がありましたが、今回のアップデートによりGlueジョブ内で更新できるようになりました。
注意点として対応していない形式があるのですが、手間が減るのはうれしいところです。 今後Glueのワークフローを構築する際には、利用してみてください。